// https://www.acwing.com/problem/content/795/

#include <iostream>
#include <vector>

using namespace std;

/*
3284925390
19
*/
string multiple(vector<int>& nums1, vector<int>& nums2) {
    // Step 1: 准备好记录结果的数组
    int max_result_length = nums1.size() + nums2.size();
    vector<int> results(max_result_length);

    // Step 2: 直接乘法，先不考虑十进制进位的问题
    for (int i=0; i<nums1.size(); i++) {
        for (int j=0; j<nums2.size(); j++) {
            results[i+j] += nums1[i] * nums2[j];
        }
    }

    // Step 3: 处理进位问题，比如第i位出现了14，那么就把这个10进到上一位，变成 4
    for (int i=0; i<max_result_length; i++) {
        if (results[i] >= 10) {
            results[i+1] += results[i] / 10;
            results[i] %= 10;
        }
    }

    // Step 4: 处理前置 0。这里需要注意results如果全部是 0，pop 后数组成为 empty，但是 result.back() == 0 依然成立，不会结束循环
    while (!results.empty() && results.back() == 0) {
        results.pop_back();
    }

    // Step 5: 将数组反转并转换为字符串
    string str_results;
    while (!results.empty()) {
        str_results += results.back() + '0';
        results.pop_back();
    }

    // 6. 如果数组为空，说明乘以了 0，因此返回 "0"
    return str_results.empty() ? "0": str_results;
}


int main() {
    string str1, str2;
    cin>>str1>>str2;

    vector<int> nums1(str1.length());
    vector<int> nums2(str2.length()     );
    int t1=0;

    for (int i=str1.length()-1; i>=0; i--) {
        nums1[t1++] = str1[i] - '0';
    }

    int t2=0;
    for (int i=str2.length()-1; i>=0; i--) {
        nums2[t2++] = str2[i] - '0';
    }

    cout<<multiple(nums1, nums2)<<endl;

    return 0;
}
